<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>js对象</title>
		<script type="text/javascript">
			/*
			 * 对象：对象是引用类型；
			 * 对象有数据和功能。对象有属性和方法；
			 * 创建对象方式：
			 *    使用new创建对象；
			 *        语法：
			 *            var obj = new Object();
			 *        解析：
			 *            new 可以省略；
			 *            对象的属性和方法可以直接给定即可；
			 *            行为方法可以直接指定一个已定义的方法即可；
			 * 			     使用delete删除对象属性,例如delete box.name;	
			 *            使用 属性名 != undefined 来判定判断属性是否存在
			 *    字面量表示法（使用{}形式直接创建对象）；
			 * 
			 * with关键字的用法：
			 *     语法：
			 *        with(对象){
			 * 	     这里面的都属于对象的作用范围；
			 * }
			 *     使用with可以省略对象名前缀；
			 * 
			 * 对象废除：
			 * 不必专门销毁对象来释放内存
			 * 当没有针对该对象的引用时，被自动废除
			 * 把对象的所有引用设置为null时也可以废除对象
			 * 
			 * js常用的内置对象：
			 *    作为一些常用的工具类方法使用；
			 * 
			 * 全局函数（Global函数）：是可以直接调用的函数；
			 * 
			 * Date对象；
			 * 
			 * 
			 */
			// 定义一个行为函数
			function doStuding2(){
				document.write("<br>I am studing...")
			}
			
			// 创建一个对象
			var obj1 = new Object();
			// 给定属性
			obj1.name = "小明";
			obj1.age = 27;
			// 定义一个行为方法
			obj1.doEating = function(content){
				document.write("你好！我是"+obj1.name+",我说，"+content);
			}
			obj1.doStuding = doStuding2;
			// 调用对象obj1的行为方法
			obj1.doEating("你吃饭了么");
			obj1.doStuding();
			
			// 第二种定义方式
			var obj2 = {
				name : "小明",
				age : 27,
				doEating:function(content){
				document.write("你好！我是"+obj2.name+",我说，"+content);
			},
				doStuding : doStuding2
			};
			
			
			document.write("<br>第二种定义对象的方式：<br>")
			// 调用第二个对象的行为
			obj2.doEating("你休息了么<br>");
			obj2.doStuding();
			
			//删除对象的属性
			delete obj2.name;
			////判断属性是否存在
			document.write("<br>我是"+(obj2.name==undefined?"没有该属性":obj2.name));
			
			// 使用with关键字操作
			var obj3 = {
				name : "小明",
				age : 27,
				doEating:function(content){
				document.write("你好！我是"+obj3.name+",我说，"+content);
			},
				doStuding : doStuding2
			};
			// with的用法：省略前缀
			with(obj3){
				document.write("<br>with关键字的用法：<br>")
			// 调用第二个对象的行为
			doEating("你休息了么<br>");
			doStuding();
			
			//删除对象的属性
			delete name;
			
			document.write("<br>name="+ (name == ""))
			////判断属性是否存在
			window.document.write("<br>我是"+(name==""?"没有该属性":name));
			}
			window.document.write("<br>我是33333："+ (obj3.name==undefined?"没有该属性":name));
			
			// 全局函数：加密解密函数
			var box = 'http://www.csdn.net/tag/方法/news';
			window.document.write("<br>加密："+encodeURI(box));	//只编码了中文（浏览器可以自动解密）
			window.document.write("<br>解密："+decodeURI(encodeURI(box)));	//还原	（）
			
			window.document.write("<br>加密："+encodeURIComponent(box));//特殊字符和中文编码了（浏览器不能自动解密）
			window.document.write("<br>解密："+decodeURIComponent(encodeURIComponent(box)));//还原
			// 全局方法：eval()方法主要担当一个字符串解析器的作用
			// 一般用于将字符串解析成为js对象，例如将字符串解析为对象（将字符串解析为json对象）
			var str = "document.write('<br>你好');";
			eval(str); // 相当于是一个js代码的解释执行器；
			var  strObj = "var obj4 = {name : '小明',age : 27,doEating:function(content){document.write('<br>你好！我是'+obj4.name+',我说，'+content);},doStuding : doStuding2};";
			// 执行上面的字符串
			eval(strObj);
			// 创建了一个名字为 obj4的对象
			obj4.doEating();
			
			// string对象  blink方法
			var str = "<br>闪烁字体~~~";
			document.write("<p>Blink: " + str.italics() + " (does not work in IE)</p>")

			document.write(typeof(str)=="string")
			
			// 2、定义一个函数，功能是去除字符串开头及末尾的空格
			var strrr = "     你好   你好         ";
			document.write("<br>没有剔除开头的空格："+strrr.length)
			function strTrim(str){
				if(typeof(str)=="string"){
					// 是字符串进行处理
					var i = 0;
					// 先剔除开头的空格
					// 查找第一个不为空格的字符的下标索引
					while(str.charAt(i++) == " "){					
					}
					// 找到第一个不为空格的位置，从这个位置开始截取字符串
					str = str.substring(i-1);
					// // 查找最后一个不为空格的字符的下标索引
					var j = str.length-1;
					while(str.charAt(j--) == " "){					
					}
					// 找到最后一个不为空格的位置，从这个位置开始截取字符串
					str = str.substring(0,j+2);
					// 返回处理结果
					return str;
				}else{
					return str;
				}
			}
			
			document.write("<br>剔除开头的空格："+strTrim(strrr).length)
			
		</script>
	</head>
	<body>
	</body>
</html>
